# -*- coding:utf-8 -*-
# @FileName  :receive_code.py
# @Time      :2022/12/21 22:24
# @Author    :凉柠
# @E-main    :1075090027@qq.com
from django.shortcuts import redirect,reverse
from django.core.cache import cache
import requests
from django.contrib.auth.models import User
from game.models.player.player import Player
from rest_framework_simplejwt.tokens import RefreshToken


from random import randint

def receive_code(request):
    data = request.GET
    code = data.get("code")
    state = data.get("state")
    if not cache.has_key(state):
        return redirect("index")
    cache.delete(state)
    apply_access_token_url = "https://www.acwing.com/third_party/api/oauth2/access_token/"
    params = {
        "appid":"4251",
        "secret":"5068238b62744e378feba57ec92ac306",
        "code":code,
    }
    access_token_res = requests.get(apply_access_token_url,params=params).json()
    access_token = access_token_res['access_token']
    openid = access_token_res['openid']

    players = Player.objects.filter(openid=openid)
    if players.exists():        # 如果该用户存在，则无需获取信息，直接登录即可
        refresh = RefreshToken.for_user(players[0].user)
        return redirect(reverse("index")+"?access=%s&refresh=%s" % (str(refresh.access_token),str(refresh)))

    get_userinfo_url = "https://www.acwing.com/third_party/api/meta/identity/getinfo/"
    params = {
        "access_token":access_token,
        "openid":openid,
    }
    userinfo_res = requests.get(get_userinfo_url,params=params).json()
    username = userinfo_res["username"]
    photo = userinfo_res["photo"]

    while User.objects.filter(username=username).exists():      # 找到一个新用户名
        username += str(randint(0,9))
    user = User.objects.create(username=username)
    player = Player.objects.create(user=user,photo=photo,openid=openid)

    refresh = RefreshToken.for_user(user)
    return redirect(reverse("index") + "?access=%s&refresh=%s" % (str(refresh.access_token), str(refresh)))